package stage

import (
	"context"

	"stage/biz/service"
	"stage/biz/utils"
	stage "stage/hertz_gen/stage"

	"github.com/cloudwego/hertz/pkg/app"
	"github.com/cloudwego/hertz/pkg/protocol/consts"
)

// AddFloor .
// @router /floor/add [POST]

// @Summary 区域添加
// @Description 添加楼层
// @Tags 区域
// @Accept  json
// @Produce  json
// @Param req body stage.Floor true "floor" true "楼层信息,name必填其他不填"
// @Param Authorization header string false "token"
// @Success 200 {object} utils.SuccessResponse "返回信息"
// @Failure 400 {object} utils.ErrResponse "错误"
// @Failure 500 {object} utils.ErrResponse "错误"
// @Router /floor/add [POST]
// @Id AddFloor
func AddFloor(ctx context.Context, c *app.RequestContext) {
	var err error
	var req stage.Floor
	err = c.BindAndValidate(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	resp, err := service.NewAddFloorService(ctx, c).Run(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	utils.SendSuccessResponse(ctx, c, consts.StatusOK, resp)
}

// DeleteFloor .
// @router /floor/delete/ [DELETE]

// @Summary 区域删除
// @Description 删除楼层
// @Tags 区域
// @Accept  json
// @Produce  json
// @Param req body stage.Param true "id" true "id必填"
// @Param Authorization header string false "token"
// @Success 200 {object} utils.SuccessResponse "返回信息"
// @Failure 400 {object} utils.ErrResponse "错误"
// @Failure 500 {object} utils.ErrResponse "错误"
// @Router /floor/delete/ [DELETE]
// @Id DeleteFloor
func DeleteFloor(ctx context.Context, c *app.RequestContext) {
	var err error
	var req stage.Param
	err = c.BindAndValidate(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	resp, err := service.NewDeleteFloorService(ctx, c).Run(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	utils.SendSuccessResponse(ctx, c, consts.StatusOK, resp)
}

// EditFloor .
// @router /floor/edit [POST]

// @Summary 区域修改
// @Description 编辑楼层
// @Tags 区域
// @Accept  json
// @Produce  json
// @Param req body stage.Floor true "id" true "id必填"
// @Param Authorization header string false "token"
// @Success 200 {object} utils.SuccessResponse "返回信息"
// @Failure 400 {object} utils.ErrResponse "错误"
// @Failure 500 {object} utils.ErrResponse "错误"
// @Router /floor/edit [POST]
// @Id EditFloor
func EditFloor(ctx context.Context, c *app.RequestContext) {
	var err error
	var req stage.Floor
	err = c.BindAndValidate(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	resp, err := service.NewEditFloorService(ctx, c).Run(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	utils.SendSuccessResponse(ctx, c, consts.StatusOK, resp)
}

// GetFloorInfo .
// @router /floor/info [GET]

// @Summary 区域信息
// @Description 获取楼层信息
// @Tags 区域
// @Accept  json
// @Produce  json
// @Param req body stage.Floor true "id" true "根据id或者名称查询"
// @Param Authorization header string false "token"
// @Success 200 {object} utils.SuccessResponse "返回信息"
// @Failure 400 {object} utils.ErrResponse "错误"
// @Failure 500 {object} utils.ErrResponse "错误"
// @Router /floor/info [GET]
// @Id GetFloorInfo
func GetFloorInfo(ctx context.Context, c *app.RequestContext) {
	var err error
	var req stage.Floor
	err = c.BindAndValidate(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	resp, err := service.NewGetFloorInfoService(ctx, c).Run(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	utils.SendSuccessResponse(ctx, c, consts.StatusOK, resp)
}

// GetFloorList .
// @router /floor/list [GET]

// @Summary 区域列表
// @Description 获取楼层列表
// @Tags 区域
// @Accept  json
// @Produce  json
// @Param req body stage.Param true "page" true "分页查询"
// @Param Authorization header string false "token"
// @Success 200 {object} utils.SuccessResponse "返回信息"
// @Failure 400 {object} utils.ErrResponse "错误"
// @Failure 500 {object} utils.ErrResponse "错误"
// @Router /floor/list [GET]
// @Id GetFloorList
func GetFloorList(ctx context.Context, c *app.RequestContext) {
	var err error
	var req stage.Param
	err = c.BindAndValidate(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	resp, err := service.NewGetFloorListService(ctx, c).Run(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	utils.SendSuccessResponse(ctx, c, consts.StatusOK, resp)
}

// AddZoom .
// @router /zoom/add [POST]

// @Summary 包间添加
// @Description 添加包间信息
// @Tags 包间
// @Accept  json
// @Produce  json
// @Param req body stage.Zoom true "name" true "包间相关信息"
// @Param Authorization header string false "token"
// @Success 200 {object} utils.SuccessResponse "返回信息"
// @Failure 400 {object} utils.ErrResponse "错误"
// @Failure 500 {object} utils.ErrResponse "错误"
// @Router /zoom/add [POST]
// @Id AddZoom
func AddZoom(ctx context.Context, c *app.RequestContext) {
	var err error
	var req stage.Zoom
	err = c.BindAndValidate(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	resp, err := service.NewAddZoomService(ctx, c).Run(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	utils.SendSuccessResponse(ctx, c, consts.StatusOK, resp)
}

// DeleteZoom .
// @router /zoom/delete [DELETE]

// @Summary 包间删除
// @Description 删除包间信息
// @Tags 包间
// @Accept  json
// @Produce  json
// @Param req body stage.Param true "id" true "id必填"
// @Param Authorization header string false "token"
// @Success 200 {object} utils.SuccessResponse "返回信息"
// @Failure 400 {object} utils.ErrResponse "错误"
// @Failure 500 {object} utils.ErrResponse "错误"
// @Router /zoom/delete [DELETE]
// @Id DeleteZoom
func DeleteZoom(ctx context.Context, c *app.RequestContext) {
	var err error
	var req stage.Param
	err = c.BindAndValidate(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	resp, err := service.NewDeleteZoomService(ctx, c).Run(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	utils.SendSuccessResponse(ctx, c, consts.StatusOK, resp)
}

// EidtZoom .
// @router /zoom/edit [POST]

// @Summary 包间修改
// @Description 修改包间信息
// @Tags 包间
// @Accept  json
// @Produce  json
// @Param req body stage.Zoom true "id" true "id必填"
// @Param Authorization header string false "token"
// @Success 200 {object} utils.SuccessResponse "返回信息"
// @Failure 400 {object} utils.ErrResponse "错误"
// @Failure 500 {object} utils.ErrResponse "错误"
// @Router /zoom/edit [POST]
// @Id EidtZoom
func EidtZoom(ctx context.Context, c *app.RequestContext) {
	var err error
	var req stage.Zoom
	err = c.BindAndValidate(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	resp, err := service.NewEidtZoomService(ctx, c).Run(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	utils.SendSuccessResponse(ctx, c, consts.StatusOK, resp)
}

// GetZoomInfo .
// @router /zoom/info [GET]

// @Summary 包间信息
// @Description 获取包间信息
// @Tags 包间
// @Accept  json
// @Produce  json
// @Param req body stage.Param true "id" true "id或名称必填"
// @Param Authorization header string false "token"
// @Success 200 {object} utils.SuccessResponse "返回信息"
// @Failure 400 {object} utils.ErrResponse "错误"
// @Failure 500 {object} utils.ErrResponse "错误"
// @Router /zoom/info [GET]
// @Id GetZoomInfo
func GetZoomInfo(ctx context.Context, c *app.RequestContext) {
	var err error
	var req stage.Zoom
	err = c.BindAndValidate(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	resp, err := service.NewGetZoomInfoService(ctx, c).Run(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	utils.SendSuccessResponse(ctx, c, consts.StatusOK, resp)
}

// GetZoomList .
// @router /zoom/list [GET]

// @Summary 区域列表
// @Description 获取包间列表
// @Tags 包间
// @Accept  json
// @Produce  json
// @Param req body stage.Param true "page" true "分页参数必填"
// @Param Authorization header string false "token"
// @Success 200 {object} utils.SuccessResponse "返回信息"
// @Failure 400 {object} utils.ErrResponse "错误"
// @Failure 500 {object} utils.ErrResponse "错误"
// @Router /zoom/list [GET]
// @Id GetZoomList
func GetZoomList(ctx context.Context, c *app.RequestContext) {
	var err error
	var req stage.Param
	err = c.BindAndValidate(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	resp, err := service.NewGetZoomListService(ctx, c).Run(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	utils.SendSuccessResponse(ctx, c, consts.StatusOK, resp)
}

// AddDesk .
// @router /desk/add [POST]

// @Summary 桌台管理
// @Description 添加桌台
// @Tags 桌台
// @Accept  json
// @Produce  json
// @Param req body stage.Desk true "name" true "名称必填"
// @Param Authorization header string false "token"
// @Success 200 {object} utils.SuccessResponse "返回信息"
// @Failure 400 {object} utils.ErrResponse "错误"
// @Failure 500 {object} utils.ErrResponse "错误"
// @Router /desk/add [POST]
// @Id AddDesk
func AddDesk(ctx context.Context, c *app.RequestContext) {
	var err error
	var req stage.Desk
	err = c.BindAndValidate(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	resp, err := service.NewAddDeskService(ctx, c).Run(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	utils.SendSuccessResponse(ctx, c, consts.StatusOK, resp)
}

// DeleteDesk .
// @router /desk/delete [DELETE]

// @Summary 桌台管理
// @Description 删除桌台
// @Tags 桌台
// @Accept  json
// @Produce  json
// @Param req body stage.Param true "id" true "id必填"
// @Param Authorization header string false "token"
// @Success 200 {object} utils.SuccessResponse "返回信息"
// @Failure 400 {object} utils.ErrResponse "错误"
// @Failure 500 {object} utils.ErrResponse "错误"
// @Router /desk/delete [DELETE]
// @Id DeleteDesk
func DeleteDesk(ctx context.Context, c *app.RequestContext) {
	var err error
	var req stage.Param
	err = c.BindAndValidate(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	resp, err := service.NewDeleteDeskService(ctx, c).Run(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	utils.SendSuccessResponse(ctx, c, consts.StatusOK, resp)
}

// EditDesk .
// @router /desk/edit [POST]

// @Summary 桌台删除
// @Description 删除桌台信息
// @Tags 桌台
// @Accept  json
// @Produce  json
// @Param req body stage.Param true "id" true "id必填"
// @Param Authorization header string false "token"
// @Success 200 {object} utils.SuccessResponse "返回信息"
// @Failure 400 {object} utils.ErrResponse "错误"
// @Failure 500 {object} utils.ErrResponse "错误"
// @Router /desk/edit [POST]
// @Id EditDesk
func EditDesk(ctx context.Context, c *app.RequestContext) {
	var err error
	var req stage.Desk
	err = c.BindAndValidate(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	resp, err := service.NewEditDeskService(ctx, c).Run(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	utils.SendSuccessResponse(ctx, c, consts.StatusOK, resp)
}

// GetDeskInfo .
// @router /desk/info [GET]

// @Summary 桌台管理
// @Description 桌台信息
// @Tags 桌台
// @Accept  json
// @Produce  json
// @Param req body stage.Param true "id" true "id必填"
// @Param Authorization header string false "token"
// @Success 200 {object} utils.SuccessResponse "返回信息"
// @Failure 400 {object} utils.ErrResponse "错误"
// @Failure 500 {object} utils.ErrResponse "错误"
// @Router /desk/info [GET]
// @Id GetDeskInfo
func GetDeskInfo(ctx context.Context, c *app.RequestContext) {
	var err error
	var req stage.Desk
	err = c.BindAndValidate(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	resp, err := service.NewGetDeskInfoService(ctx, c).Run(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	utils.SendSuccessResponse(ctx, c, consts.StatusOK, resp)
}

// GetDeskList .
// @router /desk/list [GET]

// @Summary 桌台管理
// @Description 桌台列表
// @Tags 桌台
// @Accept  json
// @Produce  json
// @Param req body stage.Param true "id" true "分页参数"
// @Param Authorization header string false "token"
// @Success 200 {object} utils.SuccessResponse "返回信息"
// @Failure 400 {object} utils.ErrResponse "错误"
// @Failure 500 {object} utils.ErrResponse "错误"
// @Router /desk/list [GET]
// @Id GetDeskList
func GetDeskList(ctx context.Context, c *app.RequestContext) {
	var err error
	var req stage.Param
	err = c.BindAndValidate(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	resp, err := service.NewGetDeskListService(ctx, c).Run(&req)
	if err != nil {
		utils.SendErrResponse(ctx, c, consts.StatusOK, err)
		return
	}

	utils.SendSuccessResponse(ctx, c, consts.StatusOK, resp)
}
